#include <algorithm>
#include <cstdio>
#include <set>

typedef long long ll;
const int N = 200005;
int n, p, q;

struct Node {
  ll x, y;
  Node() {}
  explicit Node(const ll &x, const ll &y) : x(x), y(y) {}
  inline bool operator<(const Node &rhs) const { return x < rhs.x; }
} a[N], ans;

std::multiset<Node> set;

ll gcd(ll x, ll y) { return y == 0 ? x : gcd(y, x % y); }

int main() {
#ifndef ONLINE_JUDGE
#ifdef LOCAL
  freopen("testdata.in", "r", stdin);
  freopen("testdata.out", "w", stdout);
#else
  freopen("slope.in", "r", stdin);
  freopen("slope.out", "w", stdout);
#endif
#endif

  scanf("%d%d%d", &n, &p, &q);
  for (int i = 1; i <= n; ++i) {
    scanf("%lld%lld", &a[i].x, &a[i].y), a[i].x *= p, a[i].y *= q;
    set.insert(Node(a[i].y - a[i].x, i));
  }
  a[n + 1].y = 0x3f3f3f3f3f3f3f3f;
  a[n + 2].x = 1;
  ans.x = n + 1, ans.y = n + 2;
  std::multiset<Node>::iterator iter;
  for (int i = 1; i <= n; ++i) {
    set.erase(set.find(Node(a[i].y - a[i].x, i)));
    iter = set.lower_bound(Node(a[i].y - a[i].x, 0));
    if (iter != set.end()) {
      if ((long double)std::abs(iter->x - a[i].y + a[i].x) /
              std::abs(a[iter->y].x - a[i].x) <
          (long double)std::abs(a[ans.x].y - a[ans.x].x - a[ans.y].y + a[ans.y].x) /
              std::abs(a[ans.x].x - a[ans.y].x)) {
        ans.x = i, ans.y = iter->y;
      }
    }
    if (iter != set.begin()) {
      --iter;
      if ((long double)std::abs(iter->x - a[i].y + a[i].x) /
              std::abs(a[iter->y].x - a[i].x) <
          (long double)std::abs(a[ans.x].y - a[ans.x].x - a[ans.y].y + a[ans.y].x) /
              std::abs(a[ans.x].x - a[ans.y].x)) {
        ans.x = i, ans.y = iter->y;
      }
    }
    set.insert(Node(a[i].y - a[i].x, i));
  }
  ll k1 = std::abs(a[ans.x].y - a[ans.y].y) / q;
  ll k2 = std::abs(a[ans.x].x - a[ans.y].x) / p;
  ll mgcd = gcd(k1, k2);
  printf("%lld/%lld", k1 / mgcd, k2 / mgcd);
  return 0;
}